gtkpasswordentry: Consume click events after pressing on icon
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 23 Aug 2021 23:12:31 +0000 (01:12 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Mon, 23 Aug 2021 23:12:31 +0000 (01:12 +0200)
This may result in user actions, so the gesture should consume the
events.

gtk/gtkpasswordentry.c

index 0e66499c69e06ca3d60eb0b3270811216b85d39d..ba91de58f4065ffa823b3e1be337692358bd66f3 100644 (file)
@@ -141,6 +141,12 @@ focus_changed (GtkWidget *widget)
     caps_lock_state_changed (entry->keyboard, NULL, widget);
 }
 
+static void
+gtk_password_entry_icon_press (GtkGesture *gesture)
+{
+  gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_CLAIMED);
+}
+
 /*< private >
  * gtk_password_entry_toggle_peek:
  * @entry: a `GtkPasswordEntry`
@@ -607,6 +613,8 @@ gtk_password_entry_set_show_peek_icon (GtkPasswordEntry *entry,
       gtk_widget_set_parent (entry->peek_icon, GTK_WIDGET (entry));
 
       press = gtk_gesture_click_new ();
+      g_signal_connect (press, "pressed",
+                        G_CALLBACK (gtk_password_entry_icon_press), entry);
       g_signal_connect_swapped (press, "released",
                                 G_CALLBACK (gtk_password_entry_toggle_peek), entry);
       gtk_widget_add_controller (entry->peek_icon, GTK_EVENT_CONTROLLER (press));